//
//  WBHomeViewController.swift
//  仿微博
//
//  Created by RaoBo on 2018/12/4.
//  Copyright © 2018年 RB. All rights reserved.
//

import UIKit

//Swift默认所有的类都是漏着的,加private 私有:只能在本类中使用.
private let cellId = "cellId"

class WBHomeViewController: WBBaseViewController {

    //数据源数组 懒加载、泛型
    lazy var statusList = [String]()

    
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    
    //加载数据
    override func loadData() {
        //GCD 延迟 now() + 1 从现在开始多长时间之后执行。
        //队列调度任务。
        print("刷新之前")

        DispatchQueue.main.asyncAfter(deadline: .now()+1) {
            print("开始刷新")
            if self.isPullup {
                for i in 0...15 {
                    self.statusList.append("上拉\(i)")
                }
            }else {
                for i in 0...15 {
                    
                    //闭包中使用属性请显示添加self。增强语境
                    self.statusList.insert(i.description, at: 0)
                }
            }
            
            self.refreshController?.endRefreshing()
            //修改上拉刷新标记
            self.isPullup = false

            self.tableView?.reloadData()
        }
    }
    
    //"好友" 点击事件
    @objc private func clickFriendAction () {
//        print("方法名:\(#function), 行号:\(#line)");
        let vc = WBDemoViewController()
        navigationController?.pushViewController(vc, animated: true)
    }
}



// MARK: - 设置界面
extension WBHomeViewController {
    //重写 override
    //swift 4.x 又变了,需要在加 @objc
    //Overriding non-@objc declarations from extensions is not supported
    @objc override func setupUI() {
        super.setupUI()
        
        //细节:1. option + click 查看变量类型 let btn: UIButton?
        //2.Swift 中 调用 OC 中返回 instancetype 类型的方法无法推断出类型, 一律都是可选的 ?
        //2-2 为什么Swift 有那么多解包的问题,就是因为OC的方法写的不够好,比如这个 instancetype ，不确定是那种类型 
        //3.解决办法: 请显示声明类型.(lazy 同样也要显示声明类型) , 这样就不需要解包了。
        //4.写代码的技巧: 便利构造函数使用()
        // 构造函数 .
        // 构造函数:创建对象， 便利构造函数:简化对象的创建
//        let btn: UIButton = UIButton.hm_textButton(withTitle: "好友", fontSize: 16.0, normalColor: UIColor.darkGray, highlight: UIColor.orange);
//        btn.addTarget(self, action: #selector(clickFriendAction), for: .touchUpInside)
//        navigationItem.leftBarButtonItem = UIBarButtonItem(customView: btn)
        navItem.leftBarButtonItem = UIBarButtonItem(rb_title: "好友", target: self, action: #selector(clickFriendAction))
        
        //注册可重用cell 注意写法: .self, OC是 [UITableViewCell Class]
        tableView?.register(UITableViewCell.self, forCellReuseIdentifier: cellId)
        
    }
}


// MARK: - 实现数据源代理方法，不需要super
extension WBHomeViewController {
    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return statusList.count
    }
    
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        //1.取
        let cell = tableView.dequeueReusableCell(withIdentifier: cellId)
        
        //2.设置
        cell?.textLabel?.text = statusList[indexPath.row]
        
        //3.返回
        return cell!
    }
    
    //最后一行中进行上拉刷新判断
    func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
        //1>row
        let row = indexPath.row
        //2>section
        let section = tableView.numberOfSections - 1; //数组从0开始
        //3>最后一行 最后一个section的最后一个row
        let count = tableView.numberOfRows(inSection: section) //最后一个section的row的个数
        //最后一行&&没有上拉刷新
        if row == (count - 1) && !isPullup {
            print("上拉刷新...")
            
            //修改标记
            isPullup = true
            //刷新数据
            loadData()
        }
    }
}
